Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - problema con \
Forum - PHP - problema con \"

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 15:14
Martedì, 02/10/2012
Salve, ho un problema sia nell'inserimento dati e nella modifica dati..

tutto qui funziona tutto fin che non metto ad esempio le doppie virgolette nel testo in un input text..

non capisco come devo fare ad risolvere il problema
vi posto il listato che ho fatto anche se lo fatto un po male perché non sono un grand cima di php/mysql.

Codice sorgente - presumibilmente Php

  1. <?php
  2. // Includo
  3. require_once(dirname(__FILE__) . '/../inc.php');
  4. require_once(dirname(__FILE__) . '/admin.php');
  5. require_once(dirname(__FILE__) . "/../template/".$template_admin."/header.php");
  6. require_once(dirname(__FILE__) . "/../include/tiny_mce.php");
  7.        
  8. $intID = (int)$_GET["id"];
  9.        
  10. $active = (isset($_POST["active"])) ? trim ($_POST["active"]): '';     
  11.  
  12. //Query SQL
  13.                
  14.  
  15.                 $query = "SELECT * FROM pagine WHERE id=".$intID."";
  16.                 $result = $db->query($query)   or die($db->error);
  17.                 if(empty($intID)) {
  18.                 echo "ID non specificato";
  19. }
  20. elseif ($result->num_rows==0) { echo "Record non trovato!"; }
  21. else
  22. {              
  23.                 $strSQL = "SELECT * FROM pagine"
  24.                                 . " WHERE id = ".$intID."";
  25.                 //Eseguo la query e recupero i dati
  26.                 $result =  $db->query($strSQL);
  27.         $row = $result->fetch_assoc();
  28.         //      $user = $row["_user"];
  29.                 $user_id = $row["_userid"];
  30.                 $titolo = $row['titolo'];
  31.         $testo = $row['testo'];
  32.                 $p_url = $row["url"];
  33.                 $tag = $row['tag'];
  34.         $data = $row['data'];
  35.         $active = $row['active'];
  36.          
  37.                 $data_explode = explode('-', $data);
  38.         $gg = $data_explode[2];
  39.         $mm = $data_explode[1];
  40.         $aa = $data_explode[0];        
  41.                                
  42.                 //Libero la memoria
  43.                 $result->free_result();
  44. if(isset($_POST["invia"]))
  45. {
  46.         $titolo = protect($_POST["titolo"]);
  47.     $testo =protect($_POST["testo"]);
  48.     $tag =protect($_POST["tag"]);
  49.         $user = protect($_POST["user"]);
  50.     $data = protect($_POST["data"]);
  51.         $_url = protect($_POST["_url"]);
  52.  
  53.        
  54.        
  55.         $dtmPubblicazione = $_POST["data"];
  56.     $data_explode = explode('-', $dtmPubblicazione);
  57.     $dtmPubblicazione = "".$data_explode[2]."-".$data_explode[1]."-".$data_explode[0]."";
  58.  
  59.        
  60.                 if($_POST["user"] == "0")
  61.         {
  62.         $error = "Non hai inserito l'utente";
  63.         }elseif(empty($_url))
  64.         {
  65.         $error = "Non hai inserito l'url";
  66.         }
  67.         elseif(empty($titolo))
  68.         {
  69.         $error = "Non hai inserito il titolo";
  70.         }
  71.         elseif(empty($testo))
  72.         {
  73.         $error = "Non hai inserito il testo";
  74.         }
  75.         elseif(empty($data))
  76.         {
  77.         $error = "Non hai inserito la data";
  78.         }
  79.         elseif(empty($active))
  80.         {
  81.         $error = "Non hai inserito lo stato";
  82.         }
  83.         else
  84.         {
  85.        
  86.         $db_titolo = $db->real_escape_string($titolo);
  87.     $db_testo = $db->real_escape_string($testo);
  88.     $db_data = $db->real_escape_string($data);
  89.     $db_tag = $db->real_escape_string($tag);
  90.     $db_active = $db->real_escape_string($active);
  91.         $db_user = $db->real_escape_string($user);
  92.         $db_url =  $db->real_escape_string($_url);
  93.        
  94.        
  95.                 $strSQL = "UPDATE pagine SET"
  96.                                                 . " _userid = ".$db_user.","
  97.                                                 . "url = '".$db_url."',"
  98.                                                 . " titolo = '".$db_titolo."',"
  99.                                                 . " testo = '".$db_testo."',"
  100.                                                 . " tag = '".$db_tag."',"
  101.                                                 . " data = '".$dtmPubblicazione."',"
  102.                                                 . " active = '".$db_active."'"
  103.                                 . " WHERE id = ".$intID."";    
  104.                 $db->query($strSQL)   or die($db->error);
  105.                 $db->close();
  106.                 $msg = "<p>modificato</p>";
  107.                 $msg.="<p><a href=\"pagine.php\">Torna alla lista</a></p>";
  108.                 $msg.="<p><a href=\"pag_modifica.php?id=".$intID."\">Modifica ancora</a></p>";
  109.    
  110. }  
  111.                
  112. }
  113. ?>
  114.  
  115. <p class="titolo">Modifica Pagina:  <?php echo $row["titolo"]; ?></p>
  116.  
  117. <?php   if ( isset ( $error ) ) { echo '                        <p class="error">' . $error . '</p>' . "\n";    }       ?>
  118. <?php   if ( isset ( $msg ) )   { echo '                        <p class="msg">' . $msg . '</p>' . "\n";        } else {?>
  119.  
  120.  
  121.         <form action="<?php echo $_SERVER['PHP_SELF']?>?id=<?php echo $_GET["id"]; ?>" method="post">
  122.        
  123. <table width="100%" align="center">
  124.  
  125. <tr>
  126.       <td>Seleziona user_select</td>
  127.       <td><?php echo "<select name=\"user\">";?>
  128.  
  129.    
  130.         <option  selected="selected" value="0">Seleziona</option>
  131.         <?php
  132.         $result = $db->query("SELECT * FROM utenti");
  133.        
  134.         while($row = $result->fetch_array())
  135.         {
  136.         $user= $row['_user'];
  137.         $id = $row['id'];
  138.   ?>
  139.         <option value="<?php echo $id; ?>"<?php if($user_id=="".$id."") echo 'selected'?>><?php echo $user; ?></option>
  140.         <?php
  141.   }
  142. ?>
  143.       </select></td>
  144.     </tr>
  145. <tr>
  146.         <td>Titolo</td>
  147.         <td><input name="titolo" type="text" id="titolo"  value="<?php if ( isset ( $_POST['titolo'] ) ) { echo $_POST['titolo']; } else { echo $titolo; } ?>" size="50"  /></td>
  148. </tr><tr>
  149.         <td>url</td>
  150.         <td><input name="_url" type="text" id="_url"  value="<?php if ( isset ( $_POST['_url'] ) ) { echo $_POST['_url']; } else { echo $p_url; } ?>"  /></td>
  151. </tr>
  152. <tr>
  153.         <td>Testo</td>
  154.         <td><textarea cols="50" rows="10" name="testo"><?php if ( isset ( $_POST['testo'] ) ) { echo $_POST['testo']; } else { echo $testo; } ?></textarea></td>
  155. </tr>
  156.  
  157. <tr>
  158.         <td>Data</td>
  159.         <td><input name="data" type="text" id="data"   value="<?php echo @"".$gg."-".$mm."-".$aa."";?>"  /></td>
  160. </tr><tr>
  161.         <td>tag</td>
  162.         <td><input name="tag" type="text" id="tag"  value="<?php if ( isset ( $_POST['tag'] ) ) { echo $_POST['tag']; } else { echo $tag; } ?>"  /></td>
  163. </tr>
  164. <tr>
  165.         <td>Stato di attivazione</td>
  166.         <td>
  167.  Pubblica<input type="radio" name="active" value="1"  <?php if($active=='1') echo 'checked="checked"'?> />
  168.      Nascosto<input type="radio" name="active" value="2" <?php if($active=='2') echo 'checked="checked"'?>/>
  169.        
  170.         </td>
  171. </tr>
  172. <tr>
  173.         <td></td>
  174.         <td></td>
  175. </tr>
  176. </table>
  177.                 <input type="submit" value="Modfiica" name="invia" /> <input type="reset" value="Annulla Modifiche">
  178.  
  179.         </form>
  180.         <?php
  181.         }
  182.         }?><?php
  183. require_once(dirname(__FILE__) . "/../template/".$template_admin."/footer.php");
  184. ?>



la funzione protect è questa:
Codice sorgente - presumibilmente Php

  1. function protect($value) {
  2.     $value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value;
  3.     return $value;
  4. }



mi dite come posso risolvere il problema??

scusate per l'italiano ma non so come scriverlo perché non conosco come risolvere il problema..
poi io ho problemi con linguaggio perché sono invalido.

vi ringrazio molto.. e buona giornata.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 15:43
Martedì, 02/10/2012
Che errore ricevi? è un errore PHP o MySQL? Che risultato da quando provi ad inserire un testo con "virgolette"?

PM Quote
Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 15:54
Martedì, 02/10/2012
Testo quotato

Postato originariamente da Roby94:

Che errore ricevi? è un errore PHP o MySQL? Che risultato da quando provi ad inserire un testo con "virgolette"?



ok, non ricevo nessun errore di php e mysql..

se scrivo il titolo della pagina e do invio e devo ancora inserire altri dati in altri input text ..

quello che c'è scritto dopo sparisce e rimane solo la prima parte.

come posso evitare?
grazie mille.

Ultima modifica effettuata da luigi7 il 02/10/2012 alle 15:55
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 16:29
Martedì, 02/10/2012
Beh questo mi fa pensare che la query venga modificata dai dati passati dall'input ma teoricamente se usi un metodo che si chiama real_escape_string credo che esegua la funzione mysql_real_escape_string sui dati, e questo dovrebbe impedire che la query venga modificata da virgolette presenti nel testo (principalmente per difendersi dalle SQL injector), io controllerei quel metodo.

PM Quote
Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 16:47
Martedì, 02/10/2012
ciao, ok..

però io non so il motivo in quel codice se metto questo " stripslashes " doveva fare che rimaneva anche quello dopo \" ??

non so che parte lo devo inserire..

mi dici per caso è questa funzione trovato con l'amico google..

però a me non me funziona.. ora riprovo meglio e poi ti faccio sapere..

ciao e buona giornata.

PM Quote
Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 16:56
Martedì, 02/10/2012
ad esempio ho trovato questo su un altro sito..

Codice sorgente - presumibilmente Plain Text

  1. <?
  2. $string = "L\'operazione \"GT\" per utente\\utenti";
  3. $string = stripslashes ( $string );
  4. echo $string; // risultato: L'operazione "GT" per utente\utenti
  5. ?>


questo funziona ..

ma se metto nel mio codice dopo l'invio non avend completato tutto diventa cosi:
L\'operazione

come mai ??

grazie  mille.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:01
Martedì, 02/10/2012
Allora adesso ho capito, non avevo letto bene tutto il codice, allora tu prima con mysql_real_escape_string vai a correggere la stinga per immeterla nel db quindi Ciao sono "Gianluca" diventa Ciao sono \"Gianluca\" in questo modo la query non vine modificata nel suo effetto, però tu dopo averla corretta la vai di nuovo a danneggiare con stripslashes che va a eliminare gli escape quindi la query va a modificarsi se ci sono caratteri come ' e " in poche parole via stripslashes o meglio ancora la funzione protext e esegui come una operazione il mysql_real_escape_string possibilmente direttamente da funzione e non da metodo

PM Quote
Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 17:08
Martedì, 02/10/2012
Testo quotato

Postato originariamente da Roby94:

Allora adesso ho capito, non avevo letto bene tutto il codice, allora tu prima con mysql_real_escape_string vai a correggere la stinga per immeterla nel db quindi Ciao sono "Gianluca" diventa Ciao sono \"Gianluca\" in questo modo la query non vine modificata nel suo effetto, però tu dopo averla corretta la vai di nuovo a danneggiare con stripslashes che va a eliminare gli escape quindi la query va a modificarsi se ci sono caratteri come ' e " in poche parole via stripslashes o meglio ancora la funzione protext e esegui come una operazione il mysql_real_escape_string possibilmente direttamente da funzione e non da metodo



scusa molto... non c'è nessun problema al database come dici tu..

e solo la visualizzazione nel form che sparisce..

per il database non c'è nessun problema e solo la visualizzazione del form quando vado inserire i dati con i \ etc..
e poi premo invio il form aggiorna e spariscono le lettere dopo i \..
e ho notato che nell'html viene generato cosi:

<td><input name="titolo" type="text" id="titolo"  value="L\\\'operazione \\\"GT\\\" per utente\\\\utenti" size="40"  /></td>

e firefox lo segnala di rosso e mi sembra che non è corretto..

mi dici come mai..??

grazie mille.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:15
Martedì, 02/10/2012
Guarda che è quello che ti ho detto io, fai una cosa vai direttmanete da phpmyadmin, copia un testo inserito mediante questo script e faccelo vedere

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo